草图编辑器 Sample详情
最后更新时间:2020年12月11日
为了方便用户交互式绘制图形,封装了交互编辑图形(即交互绘制图形、选择修改与删除图形)的接口,具有简便、易用、高效、实用性强的特点。
草图编辑器通过API程序包com.zondy.mapgis.map.view.sketcheditor下的相关类实现,关键类为SketchEditor。
在地图显示之后,利用地图视图对象实例化草图编辑器。
//草图编辑器 SketchEditor sketchEditor=new SketchEditor(mapView);
说明:草图编辑器绘制部分图形或移动节点时,默认具有震动的效果,需要为程序添加震动权限,在程序清单文件AndroidManifest.xml文件中添加以下权限标签。
<!-- 允许程序震动,用于草图编辑器功能 --> <uses-permission android:name="android.permission.VIBRATE" />
草图编辑器提供多种图形的绘制,调用start()方法传入对应类型后即可在地图上进行图形绘制。SketchEditor支持绘制的图形类型如下表所示:
字段 | 说明 |
---|---|
SketchDataType.POINT | 点 |
SketchDataType.MULTIPOINT | 多点 |
SketchDataType.POLYLINE | 线(普通折线) |
SketchDataType.FREEHAND_LINE | 流状线 |
SketchDataType.POLYGON | 区(普通折线区) |
SketchDataType.FREEHAND_POLYGON | 流状区 |
sketchEditor.start(SketchDataType.POINT);
sketchEditor.start(SketchDataType.MULTIPOINT);
sketchEditor.start(SketchDataType.POLYLINE);
sketchEditor.start(SketchDataType.FREEHAND_LINE);
sketchEditor.start(SketchDataType.POLYGON);
sketchEditor.start(SketchDataType.FREEHAND_POLYGON);
绘制了各种图形之后,一般可以通过手势交互来拖动图形的节点来修改形状。同时提供了下列多种图形编辑的功能,来辅助绘制想要的图形效果。
sketchEditor.addVertex(12735784, 3563488);//给一个固定点(地图坐标)
sketchEditor.deleteSelectedVertex();
sketchEditor.undo();
sketchEditor.redo();
sketchEditor.clearGeometry();
sketchEditor.stop();
上述功能除外,草图编辑器工具还具备其他许多实用的功能,这些功能对于实际项目应用来说具有显著的作用,可参考草图交互式要素编辑示例。
在绘制点、多点、普通折线、普通折线区过程中,我们可以通过手势交互操作来改变图形的形状,由于这些图形是由用户点击地图的坐标点构成的,用户可以对这些顶点进行拖动,来修整图形,达到想要的效果。同时,在绘制图形或者移动顶点时,长按地图可以开启内置放大镜功能,从而实现更精确的图形绘制。
在野外数据采集工作中,一般情况下,图形很难一次绘制就达到想要的效果,所以草图编辑器提供的这种图形修改、调整的功能对此来说能发挥很大的作用,这也是草图编辑器在实际应用中的一个典型的场景。
调用草图编辑器工具绘制的图形,都具有默认的样式,用户也可以对其进行修改,包括顶点样式、线中点样式、选中点样式、线样式、填充样式、文字样式、是否震动、是否计算距离、是否计算面积等诸多功能。
//草图编辑器样式对象 SketchStyle sketchStyle=new SketchStyle(); //根据需要设置各种样式,不一一展开 //设置样式 sketchEditor.setSketchStyle(sketchStyle);
绘制图形时,默认自动显示线段的长度、区的面积大小等信息,这些信息是根据默认的空间参考系进行计算的,可能与实际显示的地图的参考系不一致,所以可以为草图编辑器工具设置空间参考系,此时线段长度、区面积都是根据此参考系计算而来的。
//从地图中获取空间参考系,传递给草图编辑器对象 sketchEditor.setSRS(mapView.getMap().getSRSInfo());
图形绘制之后,在视图中显示的仅仅只是绘制的效果,如果要将绘制的图形生成其他的成果,例如将绘制的图形保存为地理要素,就可以采用如下方法获取编辑的几何对象Geometry再进行下一步的操作。
Geometry geometry = sketchEditor.getGeometry();
不仅是绘制新的图形,草图编辑器支持对已有的要素进行编辑的功能。调用此功能后,已有的几何对象在界面中会切换为草图编辑的状态,也即是支持用户随意拖动节点、进行加点、删点、撤销、重做等功能。
//首先获取已有的几何对象geometry,然后进行重新编辑 sketchEditor.start(geometry);
草图编辑器实现效果如下图所示: